home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / yacas_alg / yacas_morphos / share / yacas / predicates.rep / code.ys < prev   
Encoding:
Text File  |  2002-03-13  |  2.2 KB  |  87 lines

  1.  
  2.  
  3. Function("IsMatrix",{aLeft})
  4. [
  5.   If(IsList(aLeft),
  6.     [
  7.       Local(result);
  8.       result:=True;
  9.  
  10.       /*TODO also check nr elements! */
  11.       ForEach(item,aLeft)
  12.         If(Not(IsList(item)),result:=False);
  13.       result;
  14.     ],
  15.     False
  16.     );
  17. ];
  18.  
  19.  
  20. Function("IsRational",{aLeft}) Type(aLeft) = "/";
  21.  
  22. Function("IsRationalNumeric",{aLeft})
  23.     Type(aLeft) = "/" And
  24.     IsNumber(aLeft[1]) And
  25.     IsNumber(aLeft[2]);
  26.  
  27. IsRationalOrNumber(_x) <-- (IsNumber(x) Or IsRationalNumeric(x));
  28.  
  29. 10 # IsRationalOrInteger(x_IsInteger) <-- True;
  30. 10 # IsRationalOrInteger(x_IsInteger / y_IsInteger) <-- True;
  31. 20 # IsRationalOrInteger(_x) <-- False;
  32.  
  33. IsNegativeNumber(x):= IsNumber(x) And x < 0;
  34. IsPositiveNumber(x):= IsNumber(x) And x > 0;
  35.  
  36. IsNegativeInteger(x):= IsInteger(x) And x < 0;
  37. IsNonNegativeInteger(x):=IsInteger(x) And x >= 0;
  38. IsPositiveInteger(x):= IsInteger(x) And x > 0;
  39.  
  40. 10 # IsZero(x_IsNumber) <-- ( (x+0.5)-0.5  = 0);
  41. 10 # IsNotZero(x_IsNumber)       <-- ( (x+0.5)-0.5 != 0);
  42. 1000 # IsZero(_n) <-- False;
  43. 1000 # IsNotZero(_n) <-- False;
  44.  
  45. IsNonZeroInteger(x) := (IsInteger(x) And x != 0);
  46.  
  47. 10 # IsEven(n_IsInteger) <--  ( BitAnd(n,1)  = 0 );
  48. 10 # IsOdd(n_IsInteger) <--   ( BitAnd(n,1)  = 1 );
  49.  
  50.  
  51. 10 # IsInfinity(Infinity) <-- True;
  52. 10 # IsInfinity(-Infinity) <-- True;
  53. 20 # IsInfinity(_x) <-- False;
  54.  
  55. IsConstant(_n) <-- (VarList(n) = {});
  56.  
  57. Function ("IsBoolean", {x})
  58.     (x=True) Or (x=False) Or IsFunction(x) And Contains({"=", ">", "<", ">=", "<=", "!=", "And", "Not", "Or"}, Type(x));
  59.  
  60. 0 # IsBoolType(True) <-- True;
  61. 0 # IsBoolType(False) <-- True;
  62. 1 # IsBoolType(_anythingelse) <-- False;
  63.  
  64. /* See if a number, when evaluated, would be a positive/negative real value */
  65. IsPositiveReal(_r) <--
  66. [
  67.   r:=N(r);
  68.   (IsNumber(r) And r >= 0);
  69. ];
  70. IsNegativeReal(_r) <--
  71. [
  72.   r:=N(r);
  73.   (IsNumber(r) And r <= 0);
  74. ];
  75.  
  76.  
  77. /* Predicates on matrices */
  78. IsHermitean(A_IsMatrix) <-- (Conjugate(Transpose(A))=A);
  79. IsUnitary(A_IsMatrix) <-- (Transpose(Conjugate(A))*A = Identity(Length(A)));
  80.  
  81. IsVariable(_expr) <-- (IsAtom(expr) And Not(IsNumber(N(expr))));
  82.  
  83. // check that all items in the list are numbers
  84. IsNumericList(_arg'list) <-- IsList(arg'list) And
  85.     ("And" @ (MapSingle(Hold({{x},IsNumber(N(x))}), arg'list)));
  86.  
  87.